package common

import "errors"

type ResError struct {
	Biz *BizCode
	Msg string
}

func (re *ResError) Error() string {
	return re.Msg
}

func Create(err error) *ResError {
	re := new(ResError)
	var v *ResError
	switch {
	case errors.As(err, &v):
		re = v
	default:
		re = &ResError{
			Msg: err.Error(),
			Biz: BizDefaultError,
		}
	}
	return re
}

func (re *ResError) WithBiz(biz *BizCode) *ResError {
	re.Biz = biz
	re.Msg = biz.Msg
	return re
}

func (re *ResError) WithMsg(msg string) *ResError {
	re.Msg = msg
	return re
}
